package com.agnes.okhttp.lib.callback;

import android.app.Activity;

import com.agnes.okhttp.lib.dialog.ProgressDialog;
import com.agnes.okhttp.lib.util.Utils;
import com.zhy.http.okhttp.callback.StringCallback;

import org.json.JSONException;
import org.json.JSONObject;

import okhttp3.Call;
import okhttp3.Request;

public abstract class QkBaseCallback extends StringCallback {

    private boolean showLoading;
    private Activity mContext;
    private ProgressDialog mDialog;

    public QkBaseCallback(Activity context) {
        this(context, true);
    }

    public QkBaseCallback(Activity context, boolean showLoading) {
        this.showLoading = showLoading;
        mContext = context;
    }


    @Override
    public void onBefore(Request request, int id) {
        super.onBefore(request, id);
        // 请求前保存日志
        // 加载对话框
        showDialog();
    }


    @Override
    public void onError(Call call, Exception e, int id) {
        dismissDialog();
        // 错误提示
    }

    @Override
    public void onResponse(String response, int id) {
        dismissDialog();
        try {
            JSONObject rootJson = Utils.toStandard(response, emptyFlag());
            parseResult(rootJson);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    protected abstract int emptyFlag();

    protected abstract void parseResult(JSONObject rootJson);

    private void showDialog() {
        if (!showLoading || mContext == null || mContext.isFinishing()) return;
        if (mDialog == null) {
            mDialog = new ProgressDialog(mContext);
        }

        if (!mDialog.isShowing()) {
            mDialog.show();
        }
    }

    private void dismissDialog() {
        if (mDialog != null) {
            mDialog.dismiss();
        }
    }


    //    /**
//     * 处理服务器返回数据
//     */
//    private void requestFinished(String result) {
//
//        if (!CommonUtil.isEmpty(result)) {
//            int code = -1;
//            try {
//                JSONObject jsons = new JSONObject(result);
//
//                if (jsons.has("result")) {
//                    code = jsons.getInt("result");
//                }
//                if (jsons.has("code")) {
//                    code = jsons.getInt("code");
//                }
//                if (jsons.has("status")) {
//                    code = jsons.getInt("status");
//                }
//                String message = "";
//
//                if (jsons.has("Msg")) {
//                    message = jsons.getString("Msg");
//                }
//                if (jsons.has("Code")) {//是发卡的部分
//                    code = jsons.getInt("Code");
//                    if (jsons.has("Data")) {
//                        ResponseResult data = new ResponseResult();
//                        data.code = code;
//                        data.data = jsons.getString("Data");
//                        data.message = message;
//                        mListener.onResult(data);
//                        return;
//                    }
//                }
//                //判断权限是采购
//                if (jsons.has("Success")) {
//                    boolean success = jsons.getBoolean("Success");
//                    ResponseResult data = new ResponseResult();
//                    if (success) {
//                        data.code = 0;
//                    } else {
//                        data.code = 1;
//                    }
//                    if (jsons.has("Result")) {
//                        data.data = jsons.getString("Result");
//                    }
//                    data.message = jsons.getString("ErrorMessage");
//                    mListener.onResult(data);
//                    return;
//                }
//
////				if(jsons.has("message")) {
////					message = jsons.getString("message");
////				}
//
//                switch (code) {
//                    case 0:
//                        ResponseResult data = new ResponseResult();
//                        data.code = code;
//                        data.data = result;
////                        if (jsons.has("msg")){
////                            data.message = jsons.getString("msg");
////                        }else{
////                            data.message = "";
////                        }
//                        data.message = message;
//                        mListener.onResult(data);
//                        break;
//                    //增加
//                    case 2:
//                        ResponseResult datas = new ResponseResult();
//                        datas.code = code;
//                        datas.data = result;
////                        datas.message = "";
//                        if (jsons.has("msg")) {
//                            datas.message = jsons.getString("msg");
//                        } else if (jsons.has("error")) {
//                            datas.message = jsons.getString("error");
//                        } else {
//                            datas.message = "";
//                        }
//                        mListener.onResult(datas);
//                        break;
//
//
//                    default:
//
//
//                        if (jsons.has("error")) {
//                            message = jsons.getString("error");
//                        } else if (jsons.has("message")) {
//                            message = jsons.getString("message");
//                        } else if (jsons.has("msg")) {
//                            message = jsons.getString("msg");
//                        }
//                        data = new ResponseResult();
//                        data.code = code;
//                        data.data = result;
//                        data.message = message;
//                        mListener.onResult(data);
//                        break;
//                }
//            } catch (JSONException e) {
//                // TODO: handle exception
//                e.printStackTrace();
//                //推送平台的数据
//                try {
//                    JSONObject jsons = new JSONObject(result);
//                    if (jsons.has("access_token")) {
//                        ResponseResult data = new ResponseResult();
//                        data.pushToken = jsons.getString("access_token");
//                        mListener.onResult(data);
//                    }
//
//                } catch (JSONException e1) {
//                    e1.printStackTrace();
//                }
//
//            }
//
//        }
//    }
//
//    /**
//     * 连接失败
//     */
//    private void requestFailed(Throwable error, String content) {
//        QkLogUtils.log("error:" + error.getMessage() + ":" + content, apiLogFileDirectory, apiLogFileName);
//        ResponseResult result = new ResponseResult();
//        result.code = -1;
//        result.message = "连接失败";
//        mListener.onResult(result);
//    }


//
//    /**
//     * 打开加载框,用于调用接口弹出的对话框
//     *
//     * @param title
//     * @param message
//     * @return
//     */
//    public ProgressDialog showProgressDialogNew(String title, String message) {
//        try {
//            if (isFinishing() == false) {
//                if (loadingProgressDialog == null) {
//                    loadingProgressDialog = ProgressDialog.show(this, title,
//                            message);
//
//                    loadingProgressDialog.setCancelable(false);
//                    loadingProgressDialog.setCanceledOnTouchOutside(false);
//                } else {
//
//                    loadingProgressDialog.setCancelable(false);
//                    loadingProgressDialog.setCanceledOnTouchOutside(false);
//                    loadingProgressDialog.setTitle(title);
//                    loadingProgressDialog.setMessage(message);
//                    if (loadingProgressDialog.isShowing() == false) {
//                        loadingProgressDialog.show();
//                    }
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return loadingProgressDialog;
//    }
//
//    //add by clk off
//
//    public ProgressDialog getLoadingProgressDialog() {
//        if (loadingProgressDialog != null) {
//            return loadingProgressDialog;
//        } else {
//            return null;
//        }
//    }
//
//    /**
//     * 关闭对话框
//     */
//    public void dissmissProgressDialog() {
//        try {
//            if (isFinishing() == false && loadingProgressDialog != null) {
//                loadingProgressDialog.dismiss();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }


}
